#! /bin/bash
#
# moverA.sh


ERROR_PARAMETROS=-22		#Parametros invalidos
ERROR_ARCHIVO_NO_EXISTE=-23		#Archivo de origen no existe
ERROR_DIRECTORIO_NO_EXISTE=-24		#Directorio no existe
ERROR_MOVER=-25			#No se puede mover el archivo
ERROR_CREA_DUP=-26		#Error al crear el directorio /dup

DIR_DUP="Dup"	

nombreComando=Mover_A

#---------------------------------------------------------------
#Verifica la cantidad de parametros pasados
if [[ $# -lt 2  || $# -gt 3 ]]
then
	echo "  $(basename $0):  Parametros invalidos"
	echo "  Uso: $(basename $0) <nombre_arch_origen> <directorio_ destino> [<comando invocante>]"
	exit $ERROR_PARAMETROS
fi

#---------------------------------------------------------------
comlog=$(basename $0)

if [ ! -z $3 ]
then
	comlog=$3
fi

#---------------------------------------------------------------
#Verifica si el origen existe
if [ ! -r "$1" ]
then
	msj=" Archivo de origen $1 NO existe o no tiene permiso de lectura"
	echo $msj 
	exit $ERROR_ARCHIVO_NO_EXISTE
fi

##---------------------------------------------------------------
#Verifica si el origen es un archivo regular
if [ ! -f "$1" ]
then
	msj=" El archivo de origen $1 NO es un archivo REGULAR"
	echo $msj 
	exit $ERROR_ARCHIVO_NO_EXISTE
fi

#---------------------------------------------------------------
#Verifica si el origen es igual al destino
if [ "$1" = "$2" ]
then
	msj=" No se pudo Mover $1. Origen igual a destino"
	echo $msj
	exit 0
fi

#---------------------------------------------------------------
#Verifica si el directorio de destino existe
if [ ! -d "$2" ]
then
	msj=" Directorio destino $2 no existe"
	echo $msj
	exit $ERROR_DIRECTORIO_NO_EXISTE
fi

#---------------------------------------------------------------

#---------------------------------------------------------------

#Mueve un archivo de un lugar a otro
function Mover_A(){
	msj=`mv $1 $2 2>&1`
	if [ $? -ne 0 ]
	then
		echo " -- ${msj#*:}"
		exit $ERROR_MOVER
	fi	
}

#---------------------------------------------------------------
#Mueve un archivo a destino sin duplicado
if [ ! -e $2/$(basename $1) ]
then
	#De no existir el destino, lo mueve
	Mover_A $1 $2
	exit 0
fi

#---------------------------------------------------------------
#Como existe el archivo destino, se debe mover a DIR_DUP
nomArchivo=$(basename $1)
destino="$2/$DIR_DUP"


#---------------------------------------------------------------
#Verifica si el directorio destino\dup existe, sin o lo crea
if [ ! -d "$destino" ]
then
	msj=`mkdir "$destino" 2>&1`
	if [ $? -ne 0 ]
	then
		echo " -- ${msj#*:}"
		exit $ERROR_CREA_DUP
	fi
fi 

#---------------------------------------------------------------
#Busca el numero para el archivo duplicado
declare -a lista=($(ls -X -r "$destino/$nomArchivo."* 2> /dev/null)) 
valActual=0
valMax=0
for nomArch in ${lista[*]}
do
	valActual=${nomArch##*.}
	if [ $valActual -gt $valMax ]
	then
		valMax=$valActual
	fi
done
let valor="${valMax} + 1 "

#---------------------------------------------------------------
#Mueve el archivo origen al duplicado con el sufijo numeral asignado
#echo "$destino/$nomArchivo.$valor"
Mover_A $1 "$destino/$nomArchivo.$valor"

exit 0
